#!/usr/bin/env python
"""
初始化数据脚本
创建基础的权限、角色和菜单数据
"""

import os
import sys
import django

# 设置Django环境
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'devops_backend.settings')
django.setup()

from rbac.models import Permission, Role, Menu, User


def create_permissions():
    """创建基础权限"""
    permissions_data = [
        {'name': '用户管理', 'code': 'user_manage', 'description': '用户管理权限'},
        {'name': '角色管理', 'code': 'role_manage', 'description': '角色管理权限'},
        {'name': '权限管理', 'code': 'permission_manage', 'description': '权限管理权限'},
        {'name': '菜单管理', 'code': 'menu_manage', 'description': '菜单管理权限'},
        {'name': '系统监控', 'code': 'system_monitor', 'description': '系统监控权限'},
        {'name': '日志查看', 'code': 'log_view', 'description': '日志查看权限'},
        {'name': '数据库管理', 'code': 'database_manage', 'description': '数据库管理权限'},
        {'name': '数据库连接管理', 'code': 'database_connection_manage', 'description': '数据库连接管理权限'},
        {'name': 'SQL查询', 'code': 'database_query', 'description': 'SQL查询权限'},
        {'name': '数据库备份', 'code': 'database_backup', 'description': '数据库备份权限'},
        {'name': '数据库监控', 'code': 'database_monitor', 'description': '数据库监控权限'},
    ]
    
    created_permissions = []
    for perm_data in permissions_data:
        permission, created = Permission.objects.get_or_create(
            code=perm_data['code'],
            defaults={
                'name': perm_data['name'],
                'description': perm_data['description']
            }
        )
        created_permissions.append(permission)
        if created:
            print(f"创建权限: {permission.name}")
        else:
            print(f"权限已存在: {permission.name}")
    
    return created_permissions


def create_roles(permissions):
    """创建基础角色"""
    # 创建超级管理员角色
    admin_role, created = Role.objects.get_or_create(
        code='admin',
        defaults={
            'name': '超级管理员',
            'description': '拥有所有权限的超级管理员',
            'is_active': True
        }
    )
    if created:
        admin_role.permissions.set(permissions)
        print(f"创建角色: {admin_role.name}")
    else:
        print(f"角色已存在: {admin_role.name}")
    
    return admin_role


def create_menus(permissions):
    """创建基础菜单"""
    # 创建一级菜单
    system_menu, created = Menu.objects.get_or_create(
        path='/system',
        defaults={
            'name': '系统管理',
            'component': None,
            'icon': 'el-icon-setting',
            'sort_order': 1,
            'is_active': True
        }
    )
    if created:
        system_menu.permissions.set([p for p in permissions if p.code in ['user_manage', 'role_manage', 'permission_manage', 'menu_manage']])
        print(f"创建菜单: {system_menu.name}")
    
    monitor_menu, created = Menu.objects.get_or_create(
        path='/monitor',
        defaults={
            'name': '运维监控',
            'component': None,
            'icon': 'el-icon-monitor',
            'sort_order': 2,
            'is_active': True
        }
    )
    if created:
        monitor_menu.permissions.set([p for p in permissions if p.code in ['system_monitor']])
        print(f"创建菜单: {monitor_menu.name}")
    
    database_menu, created = Menu.objects.get_or_create(
        path='/database',
        defaults={
            'name': '数据库管理',
            'component': None,
            'icon': 'el-icon-coin',
            'sort_order': 3,
            'is_active': True
        }
    )
    if created:
        database_menu.permissions.set([p for p in permissions if 'database' in p.code])
        print(f"创建菜单: {database_menu.name}")
    
    return system_menu, monitor_menu, database_menu


def assign_admin_role():
    """为admin用户分配超级管理员角色"""
    try:
        admin_user = User.objects.get(username='admin')
        admin_role = Role.objects.get(code='admin')
        admin_user.roles.add(admin_role)
        print(f"为用户 {admin_user.username} 分配角色 {admin_role.name}")
    except (User.DoesNotExist, Role.DoesNotExist) as e:
        print(f"分配角色失败: {e}")


def main():
    """主函数"""
    print("开始初始化数据...")
    
    # 创建权限
    print("\n1. 创建权限...")
    permissions = create_permissions()
    
    # 创建角色
    print("\n2. 创建角色...")
    admin_role = create_roles(permissions)
    
    # 创建菜单
    print("\n3. 创建菜单...")
    system_menu, monitor_menu, database_menu = create_menus(permissions)
    
    # 分配角色
    print("\n4. 分配角色...")
    assign_admin_role()
    
    print("\n数据初始化完成！")


if __name__ == '__main__':
    main()
